裝好外掛後,設定頁顯示「已啟用」,不代表我們已經驗證了偵測流程。這篇教學會在自己的 WordPress 測試站啟用 WebDecoy 的觀察模式,送出一個可辨識的測試請求,再到後台確認紀錄。
我是 WebDecoy 的開發者 Chris Portscheller。本文使用的本機功能免費、開放原始碼,不需要 WebDecoy 帳號或 API 金鑰;雲端連線是選用功能。
測試環境是獨立的 Docker WordPress 7.1、PHP 8.3.33,以及 WebDecoy 2.10.1,僅對本機開放 localhost:18080。外掛程式碼來自 GitHub 提交 d386344d65a7487d153125c20705ee594da83a5f。WordPress.org 發行版可能與 GitHub 更新時間不同,請記下自己安裝的版本。
目標是驗證「請求 → 偵測 → 紀錄」,不是測量攔截率、誤判率或效能。請先在自己管理的測試站操作。
在 WordPress 後台開啟「外掛 → 安裝外掛」,搜尋 WebDecoy,核對外掛頁面後安裝並啟用。官方目錄在 WordPress.org。
如果平常使用 WP-CLI,也可以在該 WordPress 站台目錄執行:
wp plugin install webdecoy --activate
本次實測是把上述 GitHub 版本放入外掛目錄後啟用,並非重新下載 WordPress.org 套件。
前往 WebDecoy → Settings → Blocking,勾選 Monitor mode,儲存設定,再確認勾選狀態仍在。英文說明是「Watch only — detect and log everything, block nothing」。

觀察模式會偵測及記錄,但不套用 WebDecoy 的封鎖動作。其他 WAF、安全外掛或主機規則仍可能攔截請求。
WP-CLI 的等效操作與檢查方式:
wp webdecoy config set mode monitor
wp webdecoy config get mode
wp webdecoy status
確認模式為 monitor,並記下 detections_total 和 active_blocks。如果 wp-config.php 使用 WEBDECOY_DEFAULT_MODE 固定模式,CLI 可能拒絕修改,請以實際輸出為準。
回到 WordPress「控制台」,找到 WebDecoy - Threat Overview 小工具中的 open your canary 連結。複製連結網址。
Canary 是用來觀察存取行為的誘餌路徑。這次我們會刻意存取它,讓偵測流程留下可核對的紀錄。每個站台的路徑可能不同,不要複製別人的路徑,也不需要建立真的機密檔案。
將下方的範例網址換成剛剛複製的完整網址,再執行:
CANARY_URL='https://your-staging.example/__wd/REPLACE_WITH_YOUR_TOKEN'
curl -sS -A 'WebDecoy-Tutorial/1.0' \
-o /dev/null -w 'HTTP %{http_code}\n' \
"$CANARY_URL"
這個 curl 請求沒有 WordPress 管理員登入 Cookie;自訂的 User-Agent 方便稍後辨識。不要直接在已登入管理員的分頁測試,因為登入身分可能影響處理方式。
開啟 WebDecoy → Detections,依時間找到剛才的紀錄,核對 User-Agent 是否為 WebDecoy-Tutorial/1.0。

本次乾淨測試站的結果如下:
| 項目 | 測試前 | 測試後 |
|---|---|---|
| 模式 | monitor | monitor |
| 偵測總數 | 0 | 1 |
| 有效封鎖數 | 0 | 0 |
| 雲端 | 未連線 | 未連線 |
HTTP 回應是 301。它不是「遭到封鎖」的證明;判讀時要把 HTTP 回應、偵測紀錄和封鎖狀態分開看。你自己的環境可能回傳不同狀態碼。
畫面中的 172.21.0.1 是本機 Docker 網路位址,不是真實訪客 IP。紀錄的 HIGH 分級是規則的判定結果,也不等於這個請求一定有惡意——這次就是我們自己送的。
不要把「沒有紀錄」直接解讀為「沒有機器人」。這個測試只確認一條偵測路徑,並沒有覆蓋所有請求或所有功能。
完成後可以維持觀察模式,試用站台的重要流程,再依紀錄決定是否調整規則。這次教學不會自動切換成封鎖模式。
外掛:WordPress.org · 原始碼與問題回報:GitHub